import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


@SuppressWarnings("serial")
public class battle extends JPanel{
	boolean turn = true, vege = false;
	compships gep;
	public battle harc;
    public int [][]lovesekc = new int[10][10];
    public int [][]lovesekj = new int[10][10];
    public JButton [][]tablac = new JButton[10][10];
    public JButton [][]tablaj = new JButton[10][10];
	public Random random;
	public boolean mehet = true;
	public int plcounter, cpcounter;
	public Dimension lasthit;
	public int direction;
	public newgame uj;
	public toplist top;
	public Fomenu fomenu;
	public JFrame frame;
	
	/**
	 * a jatek vegen megadjuk a nevet, es az ok gombra kattintva megjelenik a toplista, 
	 * amibe a legutobb elert eredmenyunk is be lesz toltve
	 * @author Csiszer
	 *
	 */
	public class MyActionListener3 implements ActionListener {
    	public void actionPerformed(ActionEvent e){ 
    		uj.setVisible(false);
    		top = new toplist(frame, fomenu);
			top.setVisible(true);
			frame.add(top); 
			frame.setContentPane(top);
			top.update(uj.nev.getText(), plcounter);
    		
    		
            }
    }
	
	battle(JFrame frame, Fomenu fomenu, newgame uj, int allok, int[][] lovesekc, int[][] lovesekj, JButton[][] tablaj, JButton[][] tablac){
		this.uj = uj;
		this.frame = frame;
		this.fomenu = fomenu;
		this.top = fomenu.top;
		
		uj.hely.setText("Harc!");
		this.lovesekc = lovesekc;
		this.lovesekj = lovesekj;
		this.tablac = tablac;
		this.tablaj = tablaj;
		this.random = new Random();
		this.random.setSeed(System.currentTimeMillis());
		this.lasthit = null;
		this.direction = 0;
	}
	/**
	 * a jatekos loveseit feldolgozo fuggveny, ha talalt akkor feherre festi az adott gombot, hanem akkor pirosra
	 * @param sor a newgamebol megkapja a kattintas sorat
	 * @param oszlop a newgamebol megkapja a kattintas oszlopat
	 */
	public void playerloves(int sor, int oszlop) {
		if (lehetseges(lovesekc) != 0 && (lehetseges(lovesekj) != 0)){
			if (lovesekc[sor][oszlop] > 1) return;
			if (lovesekc[sor][oszlop] == 1){
				tablac[sor][oszlop].setBackground(Color.WHITE);
				lovesekc[sor][oszlop] = 2;
				if (lehetseges(lovesekc) == 0) {
					
					uj.hely.setText("NYERTEL!");
						 uj.szovegek.remove(uj.hely);
						 uj.szovegek.add(uj.nev);
						 uj.szovegek.add(uj.ok, BorderLayout.EAST);
						 uj.nev.setFont(new Font("Serif", Font.ITALIC, 35));
						 uj.ok.addActionListener(new MyActionListener3());

				}
			} else if (lovesekc[sor][oszlop] == 0) {
				tablac[sor][oszlop].setBackground(new Color(178, 34, 34));
				lovesekc[sor][oszlop] = 3;
			}
			tablac[sor][oszlop].setEnabled(false);
			plcounter++;
			
			geplo();
		}
	}
	/**
	 * a gep loveseit szimulalo fuggveny. randomra lo egy pontba a tablan.
	 * ha talalt akkor megvizsgalja a talalat helye koruli zonakat a negy iranyba, erre a driArray[][]
	 * ha nemtalalt akkor a kovetkezo lovesnel ujra randomolni fog
	 */
	public void geplo(){
		int sor, oszlop;
		int[][] dirArray = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
		if (lehetseges(lovesekj) != 0 && (lehetseges(lovesekc) != 0)){
			if (this.lasthit == null) {
				sor = random.nextInt(10);
				oszlop = random.nextInt(10);
			} else {
				sor = lasthit.width + dirArray[direction][0];
				oszlop = lasthit.height + dirArray[direction][1];
				if (sor < 0 || sor > 9 || oszlop < 0 || oszlop > 9 || lovesekj[sor][oszlop] > 1) {
					if (++this.direction >= dirArray.length) {
						this.lasthit = null;
						this.direction = 0;
					}
					
					geplo();
					return;
				}
			}
			if (lovesekj[sor][oszlop] == 1) {
				tablaj[sor][oszlop].setBackground(Color.WHITE);
				lovesekj[sor][oszlop] = 2;
				this.lasthit = new Dimension(sor, oszlop);
				if (lehetseges(lovesekj) == 0) {
					uj.hely.setText("VESZTETTEL!");
					
				}
			} else if (lovesekj[sor][oszlop] == 0) {
				tablaj[sor][oszlop].setBackground(new Color(178, 34, 34));
				lovesekj[sor][oszlop] = 3;
			} else {
				this.lasthit = null;
				this.direction = 0;
				geplo();
			}
		}
	}
	
	/**
	 * a kapott matrixrol visszaadja, hogy hany 1es van benne, azaz hany kilovetlen hajo maradt
	 * ha ez 0 akkor az illeto jatekos nyert, mert kilott minden hajot az ellenfel tablajarol
	 * @param matrix
	 * @return
	 */
	public int lehetseges(int[][] matrix) {
		int szam = 0;
		for (int sor = 0; sor < 10; ++sor) {
			for (int oszlop = 0; oszlop < 10; ++oszlop) {
				if (matrix[sor][oszlop] == 1) ++szam;
			}
		}
		return szam;
	}
}

